import http from '../utils/http'

// 任务步骤相关API接口

/**
 * 分页查询任务的步骤列表
 * @param {Object} params - 查询参数
 * @param {number} params.pageNum - 页码
 * @param {number} params.pageSize - 每页大小
 * @param {number} params.taskId - 任务ID
 * @param {string} params.status - 步骤状态（可选）
 */
export const pageTaskSteps = (params) => http.get('/api/task-steps/page', { params })

/**
 * 查询任务的所有步骤（树形结构）
 * @param {Object} params - 查询参数
 * @param {number} params.taskId - 任务ID
 * @param {string} params.status - 步骤状态（可选）
 */
export const getTaskStepsTree = (params) => http.get('/api/task-steps/tree', { params })

/**
 * 根据ID查询步骤详情
 * @param {number} id - 步骤ID
 */
export const getTaskStepById = (id) => http.get(`/api/task-steps/${id}`)

/**
 * 创建任务步骤
 * @param {Object} data - 步骤信息
 */
export const createTaskStep = (data) => http.post('/api/task-steps', data)

/**
 * 更新任务步骤
 * @param {number} id - 步骤ID
 * @param {Object} data - 步骤信息
 */
export const updateTaskStep = (id, data) => http.put(`/api/task-steps/${id}`, data)

/**
 * 删除任务步骤
 * @param {number} id - 步骤ID
 */
export const deleteTaskStep = (id) => http.delete(`/api/task-steps/${id}`)

/**
 * 批量删除任务步骤
 * @param {Array<number>} stepIds - 步骤ID列表
 */
export const batchDeleteTaskSteps = (stepIds) => http.delete('/api/task-steps/batch', { data: stepIds })

/**
 * 更新步骤顺序
 * @param {number} id - 步骤ID
 * @param {number} newOrder - 新顺序
 */
export const updateStepOrder = (id, newOrder) => http.put(`/api/task-steps/${id}/order`, null, { params: { newOrder } })

/**
 * 批量更新步骤顺序
 * @param {Object} stepOrders - 步骤顺序映射 {stepId: newOrder}
 */
export const batchUpdateStepOrders = (stepOrders) => http.put('/api/task-steps/batch/order', stepOrders)

/**
 * 查询步骤的子步骤
 * @param {Object} params - 查询参数
 * @param {number} params.parentStepId - 父步骤ID
 * @param {string} params.status - 步骤状态（可选）
 */
export const getChildrenByParentId = (params) => http.get(`/api/task-steps/${params.parentStepId}/children`, { params })

/**
 * 查询步骤的父步骤
 * @param {number} stepId - 步骤ID
 */
export const getParentByStepId = (stepId) => http.get(`/api/task-steps/${stepId}/parent`)

/**
 * 查询步骤的依赖步骤
 * @param {number} stepId - 步骤ID
 */
export const getDependenciesByStepId = (stepId) => http.get(`/api/task-steps/${stepId}/dependencies`)

/**
 * 查询步骤的依赖步骤
 * @param {number} stepId - 步骤ID
 */
export const getDependentsByStepId = (stepId) => http.get(`/api/task-steps/${stepId}/dependents`)

/**
 * 查询任务中指定类型的步骤
 * @param {Object} params - 查询参数
 * @param {number} params.taskId - 任务ID
 * @param {string} params.stepType - 步骤类型
 * @param {string} params.status - 步骤状态（可选）
 */
export const getStepsByType = (params) => http.get('/api/task-steps/by-type', { params })

/**
 * 统计任务的步骤数量
 * @param {Object} params - 查询参数
 * @param {number} params.taskId - 任务ID
 * @param {string} params.status - 步骤状态（可选）
 */
export const countStepsByTaskId = (params) => http.get('/api/task-steps/count', { params })

/**
 * 查询用户可访问的步骤
 * @param {Object} params - 查询参数
 * @param {number} params.taskId - 任务ID
 * @param {number} params.userId - 用户ID
 * @param {string} params.status - 步骤状态（可选）
 */
export const getAccessibleSteps = (params) => http.get('/api/task-steps/accessible', { params })

/**
 * 验证步骤依赖关系
 * @param {number} stepId - 步骤ID
 */
export const validateStepDependencies = (stepId) => http.get(`/api/task-steps/${stepId}/validate-dependencies`)

/**
 * 复制任务步骤到新任务
 * @param {Object} params - 复制参数
 * @param {number} params.sourceTaskId - 源任务ID
 * @param {number} params.targetTaskId - 目标任务ID
 */
export const copyTaskSteps = (params) => http.post('/api/task-steps/copy', null, { params })

/**
 * 获取步骤的完整路径
 * @param {number} stepId - 步骤ID
 */
export const getStepPath = (stepId) => http.get(`/api/task-steps/${stepId}/path`)

/**
 * 检查步骤是否可见
 * @param {Object} params - 查询参数
 * @param {number} params.stepId - 步骤ID
 * @param {number} params.userId - 用户ID
 */
export const isStepVisible = (params) => http.get(`/api/task-steps/${params.stepId}/visible`, { params })

/**
 * 检查步骤是否可跳过
 * @param {Object} params - 查询参数
 * @param {number} params.stepId - 步骤ID
 * @param {number} params.userId - 用户ID
 */
export const isStepSkippable = (params) => http.get(`/api/task-steps/${params.stepId}/skippable`, { params })

// 步骤类型常量
export const STEP_TYPES = {
  INSTRUCTION: 'instruction',
  CODING: 'coding',
  QUIZ: 'quiz',
  UPLOAD: 'upload',
  REVIEW: 'review'
}

// 步骤状态常量
export const STEP_STATUS = {
  ACTIVE: 'active',
  INACTIVE: 'inactive',
  DELETED: 'deleted'
}

// 步骤类型标签映射
export const STEP_TYPE_LABELS = {
  [STEP_TYPES.INSTRUCTION]: '说明',
  [STEP_TYPES.CODING]: '编程',
  [STEP_TYPES.QUIZ]: '测验',
  [STEP_TYPES.UPLOAD]: '上传',
  [STEP_TYPES.REVIEW]: '审核'
}

// 步骤状态标签映射
export const STEP_STATUS_LABELS = {
  [STEP_STATUS.ACTIVE]: '激活',
  [STEP_STATUS.INACTIVE]: '停用',
  [STEP_STATUS.DELETED]: '删除'
}

/**
 * 获取步骤类型标签
 * @param {string} stepType - 步骤类型
 * @returns {string} 步骤类型标签
 */
export const getStepTypeLabel = (stepType) => {
  return STEP_TYPE_LABELS[stepType] || stepType
}

/**
 * 获取步骤状态标签
 * @param {string} status - 步骤状态
 * @returns {string} 步骤状态标签
 */
export const getStepStatusLabel = (status) => {
  return STEP_STATUS_LABELS[status] || status
}

/**
 * 获取步骤类型颜色
 * @param {string} stepType - 步骤类型
 * @returns {string} 颜色值
 */
export const getStepTypeColor = (stepType) => {
  const colors = {
    [STEP_TYPES.INSTRUCTION]: '#1890ff',
    [STEP_TYPES.CODING]: '#52c41a',
    [STEP_TYPES.QUIZ]: '#faad14',
    [STEP_TYPES.UPLOAD]: '#722ed1',
    [STEP_TYPES.REVIEW]: '#eb2f96'
  }
  return colors[stepType] || '#666'
}

/**
 * 获取步骤状态颜色
 * @param {string} status - 步骤状态
 * @returns {string} 颜色值
 */
export const getStepStatusColor = (status) => {
  const colors = {
    [STEP_STATUS.ACTIVE]: '#52c41a',
    [STEP_STATUS.INACTIVE]: '#faad14',
    [STEP_STATUS.DELETED]: '#ff4d4f'
  }
  return colors[status] || '#666'
} 